<?php
/**
 *掌里通定时任务闭包
 */
namespace App\Http\Controllers;
//数据库
use Illuminate\Support\Facades\DB;
//加载所需模型
use App\Models\Shop;
use App\Models\Order;
//use App\Models\UserCheck;
//use App\Models\WalletLog;
use App\Tools\SqlIncrement;
use App\Tools\MoneyChange;

class TimedTasks extends Controller
{


//    //十分钟关闭外卖订单
//    public function  cancelOrders(){
//        //DB::table('orders')->delete();
//        $orders = DB::table('orders')
//            ->leftJoin('users', 'users.id', '=', 'orders.user_id')
//            ->where('orders.order_status','=',6)
//            ->where('orders.order_type','=',0)
//            ->where('orders.updated_at','<=',date('Y-m-d H:i:s',time()-600))
//            ->select('users.money', 'orders.id', 'orders.order_amount')
//            ->update(['users.money']);
//        //->update(['order_status' => 6]);
//        return $orders;
//
//    }

    //十分钟关闭外卖订单
    public function  cancelOrders(){
        //return date('Y-m-d H:i:s',time()-600);
        $orders = Order::where('order_type',0)
            ->where('order_status',2)
            ->where('updated_at','<=',date('Y-m-d H:i:s',time()-600))
            ->get();
        if($orders){
            //处理流水
            foreach ($orders as $v){
                //加流水
                $this->add_money($v->user_id,$v->order_amount,1,'商家十分钟未接单，系统自动退单,订单编号：'.$v->order_number,0,'退款');
                //更新订单
                $update = Order::find($v->id);
                $update->update(['order_status' => -3,'note'=>'超时未接单，系统自动关闭']);
            }

        }
        return 'ok';
    }
    //一天确定外卖订单
    public function  orderOrders(){
        $orders = Order::where('order_type',0)
            ->where('order_status',3)
            ->where('updated_at','<=',date('Y-m-d H:i:s',time()-3600*12))
            ->get();
        //return  $orders;
        if($orders){
            $money= new MoneyChange();
            $sqladd = new SqlIncrement();
            foreach ($orders as $v){
                //加流水
                $shop = Shop::find($v->shop_id);
                if($shop){
                    //确认收货
                    $money->add_money($shop->user_id,$v->order_price,1,'用户半天未确认,系统自动收货,订单编号'.$v->order_number,0,'外卖',$v->id);
                }
                //更新订单
                $update = Order::find($v->id);
                $update->update(['order_status' => 4]);
                //数据库自增
                $sqladd->dishIncrement($v->id);
            }

        }
    }

    //关闭超时未付款预定订单
    public function  closeOrders(){
         Order::where('order_type',1)
            ->where('order_status',1)
            ->where('updated_at','<=',date('Y-m-d H:i:s',time()-1800))
            ->update(['order_status' =>-3,'note'=>'超时未付款系统自动关闭']);
    }
//    /**
//     * 余额变动
//     * $id=用户id,$money=变动金,$type=类型（o减 1加）,$sign=交易备注,$trace_way交易方式（0余额1微信2支付宝3其他）
//     */
//    protected function  add_money($id,$money,$type=0,$sign='',$trace_way){
//        //检查用户
//        $changeUser = UserCheck::find($id);
//        if(!$changeUser){
//            return false;
//        }else{
//            if($type==0){//减钱
//                $changeUser->money = $changeUser->money - $money;
//                $now_money = $changeUser->money;
//                $changeUser->save();
//            }else if($type==1){//加钱
//                $changeUser->money = $changeUser->money + $money;
//                $now_money = $changeUser->money;
//                $changeUser->save();
//            }else{
//                return false;
//            }
//            $this->add_wallet_log($id,$money,$now_money,$type,$sign,$trace_way);
//            return true;
//        }
//    }
//    /**
//     * 添加流水
//     */
//    protected function  add_wallet_log($id,$money,$now_money,$type,$sign='',$trace_way=0){
//        WalletLog::create([
//            'user_id'=>$id,
//            'serial_number'=>randID(),
//            'type'=>$type,
//            'work_capital'=>$money,
//            'now_money'=>$now_money,
//            'sign' =>$sign,
//            'trace_way'=>$trace_way,
//        ]);
//        return true;
//    }

}